home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / c / datelib.exe / CNVTDATE.C < prev    next >
C/C++ Source or Header  |  1992-03-27  |  7KB  |  211 lines

  1. static char cnvtdate_prog[] = "@(#)Datumskonversionen";
  2. static char cnvtdate_ver[]  = "@(#)ver 1.00/kr ; 31.05.91";
  3. /* cnvtdate         Konvertieren von Datumsformaten
  4. **
  5. ** Autor            Klaus Rath
  6. **
  7. ** Deklaration      char *cnvtdate(char *datum, int dest_format);
  8. **
  9. ** Übergabe         Die Funktion erwartet einen String in einem der folgenden
  10. **                  Formate :
  11. **                  tt.mm.[[jj]jj] -- Deutsches Format
  12. **                  mm/tt[/[jj]jj] -- Amerikanisches Format
  13. **                  [jj]jjmmtt     -- Datenbankformat DDB/4
  14. **                  sowie einen int-Wert, der das Ausgabeformat festlegt.
  15. ** Rückgabe         Zeiger auf ein char-Array, das ausreichend dimensioniert
  16. **                  sein sollte.
  17. ** Anmerkungen      Die Funktion überprüft nicht selbst die Validität des
  18. **                  übergebenen Datums. Dies sollte die aufrufende Funktion
  19. **                  vorher mittels checkdate() sichergestellt haben.
  20. **                  Sollte kein Jahr[hundert] im Übergabestring angegeben wor-
  21. **                  den sein, ermittelt die Funktion das Default-Jahr[hundert]
  22. **                  aus der Systemzeit !
  23. ** Änderungen       1.00 ; 31.05.91
  24. **                  Erste vollwertige Version
  25. */
  26.  
  27. #include <stdio.h>
  28. #include <string.h>
  29. #include <time.h>
  30. #ifdef __TURBOC__
  31. #define ANSI
  32. #define MSDOS
  33. #include <stdlib.h>
  34. #include <sys\types.h>
  35. #else
  36. #include <sys/types.h>
  37. #endif
  38. #include "datum.h"
  39.  
  40. #ifdef ANSI
  41. char *cnvtdate(char *dstring, int dest_format, char *erg)
  42. #else
  43. char *cnvtdate(dstring,dest_format,erg)
  44. char *dstring;
  45. int   dest_format;
  46. char *erg;
  47. #endif
  48. {
  49.     char   tag_s[3],monat_s[3],jahr_s[3],jh_s[3];
  50.     int    format;
  51.     char   systemzeit_s[26];
  52.     time_t systemzeit;
  53.     int    zaehler;
  54.  
  55.     erg[0] = '\0';
  56.  
  57.     /* Überprüfung auf Gültigkeit bzw. Format :
  58.     */
  59.     format = checkdate(dstring);
  60.     if ( !format ) {
  61.         strcpy(erg,(char *)FALSE);
  62.         return(erg);
  63.     }
  64.  
  65.     /* Jahrhundert und Jahr aus der Systemzeit ermitteln und vorbelegen :
  66.     */
  67.     time(&systemzeit);
  68.     strcpy(systemzeit_s,ctime(&systemzeit));
  69.     jh_s[0] = systemzeit_s[20];
  70.     jh_s[1] = systemzeit_s[21];
  71.     jh_s[2] = '\0';
  72.     jahr_s[0] = systemzeit_s[22];
  73.     jahr_s[1] = systemzeit_s[23];
  74.     jahr_s[2] = '\0';
  75.  
  76.     /* Format überprüfen und umkopieren :
  77.     */
  78.     if ( format == 1 || format == 2 || format == 7 ) {  /* deutsches Format */
  79.         tag_s[0]   = dstring[0];
  80.         tag_s[1]   = dstring[1];
  81.         tag_s[2]   = '\0';
  82.         monat_s[0] = dstring[3];
  83.         monat_s[1] = dstring[4];
  84.         monat_s[2] = '\0';
  85.         if ( format == 2 ) {
  86.             jh_s[0] = dstring[6];
  87.             jh_s[1] = dstring[7];
  88.             jh_s[2] = '\0';
  89.             jahr_s[0] = dstring[8];
  90.             jahr_s[1] = dstring[9];
  91.             jahr_s[2] = '\0';
  92.         }
  93.         else if ( format == 1 ) {
  94.             jahr_s[0] = dstring[6];
  95.             jahr_s[1] = dstring[7];
  96.             jahr_s[2] = '\0';
  97.         }
  98.     } /* ENDE: Deutsches Format */
  99.     else if ( format == 3 || format == 4 || format == 8 ) {  /* am.Format   */
  100.         tag_s[0]   = dstring[3];
  101.         tag_s[1]   = dstring[4];
  102.         tag_s[2]   = '\0';
  103.         monat_s[0] = dstring[0];
  104.         monat_s[1] = dstring[1];
  105.         monat_s[2] = '\0';
  106.         if ( format == 4 ) {
  107.             jh_s[0] = dstring[6];
  108.             jh_s[1] = dstring[7];
  109.             jh_s[2] = '\0';
  110.             jahr_s[0] = dstring[8];
  111.             jahr_s[1] = dstring[9];
  112.             jahr_s[2] = '\0';
  113.         }
  114.         else if ( format == 3 ) {
  115.             jahr_s[0] = dstring[6];
  116.             jahr_s[1] = dstring[7];
  117.             jahr_s[2] = '\0';
  118.         }
  119.     } /* ENDE: Amerikanisches Format */
  120.     else if ( format == 5 || format == 6 ) {            /* Datenbank-Format */
  121.         if ( format == 6 ) {
  122.             jh_s[0]    = dstring[0];
  123.             jh_s[1]    = dstring[1];
  124.             jh_s[2]    = '\0';
  125.             jahr_s[0]  = dstring[2];
  126.             jahr_s[1]  = dstring[3];
  127.             jahr_s[2]  = '\0';
  128.             tag_s[0]   = dstring[6];
  129.             tag_s[1]   = dstring[7];
  130.             tag_s[2]   = '\0';
  131.             monat_s[0] = dstring[4];
  132.             monat_s[1] = dstring[5];
  133.             monat_s[2] = '\0';
  134.         }
  135.         else {
  136.             jahr_s[0]  = dstring[0];
  137.             jahr_s[1]  = dstring[1];
  138.             jahr_s[2]  = '\0';
  139.             tag_s[0]   = dstring[4];
  140.             tag_s[1]   = dstring[5];
  141.             tag_s[2]   = '\0';
  142.             monat_s[0] = dstring[2];
  143.             monat_s[1] = dstring[3];
  144.             monat_s[2] = '\0';
  145.         }
  146.     } /* ENDE: Datenbankformat */
  147.     /* ENDE:if(Formatprüfung und Kopierung) */
  148.  
  149.     /* Umkopieren in das passende Format, falls nötig :
  150.     */
  151.     if ( format == dest_format ) {
  152.         return(dstring);
  153.     }
  154.  
  155.     switch ( dest_format ) {
  156.  
  157.       /* Deutsche Formate                                                   */
  158.       case 1: strcpy(erg,tag_s);
  159.               strcat(erg,".");
  160.               strcat(erg,monat_s);
  161.               strcat(erg,".");
  162.               strcat(erg,jahr_s);
  163.               return(erg);
  164.       case 2: strcpy(erg,tag_s);
  165.               strcat(erg,".");
  166.               strcat(erg,monat_s);
  167.               strcat(erg,".");
  168.               strcat(erg,jh_s);
  169.               strcat(erg,jahr_s);
  170.               return(erg);
  171.       case 7: strcpy(erg,tag_s);
  172.               strcat(erg,".");
  173.               strcat(erg,monat_s);
  174.               strcat(erg,".");
  175.               return(erg);
  176.  
  177.       /* Amerikanische Formate                                              */
  178.       case 3: strcpy(erg,monat_s);
  179.               strcat(erg,"/");
  180.               strcat(erg,tag_s);
  181.               strcat(erg,"/");
  182.               strcat(erg,jahr_s);
  183.               return(erg);
  184.       case 4: strcpy(erg,monat_s);
  185.               strcat(erg,"/");
  186.               strcat(erg,tag_s);
  187.               strcat(erg,"/");
  188.               strcat(erg,jh_s);
  189.               strcat(erg,jahr_s);
  190.               return(erg);
  191.       case 8: strcpy(erg,monat_s);
  192.               strcat(erg,"/");
  193.               strcat(erg,tag_s);
  194.               return(erg);
  195.  
  196.       /* Datenbankformate                                                   */
  197.       case 5: strcpy(erg,jahr_s);
  198.               strcat(erg,monat_s);
  199.               strcat(erg,tag_s);
  200.               return(erg);
  201.       case 6: strcpy(erg,jh_s);
  202.               strcat(erg,jahr_s);
  203.               strcat(erg,monat_s);
  204.               strcat(erg,tag_s);
  205.               return(erg);
  206.  
  207.     } /* ENDE: switch(dest_format) */
  208.  
  209.     return((char *)NULL);
  210. } /* ENDE: cnvtdate() */
  211.